/**
 * @file hart.h
 * @author: xxx
 * @date: 2023-08-25 00:14:59
 * @brief
 * @copyright: Copyright (c) 2023 by xxx, All Rights Reserved.
 */

#ifndef _HART_H_
#define _HART_H_
#include "lib.h"
#include "./hart_frame.h"

#ifdef MASTER
#include "../master/inc/hart_master.h"
#endif

#ifdef SLAVE
#include "../slave/inc/hart_slave.h"
#endif

typedef enum
{
    MODULE_MASTER = 1,
    MODULE_SLAVE = 2,
} modul_e; // 模块工作模式

#pragma pack(1)

typedef struct
{
    uint8_t hart_protocol_version; // hart协议版本号，传入模块初始化参数
    uint8_t dir;                   // 1:master 2:slave; 模块工作模式，传入模块初始化参数

    uint8_t master_address_bit; // 主机参数,为1时表示基本主设备，为0时表示副主设备，传入模块初始化参数
    hart_interface_t interface; // 模块接口

    // 模块初始化参数，存放全局变量
    union
    {
#ifdef MASTER
        hart_master_init_t _master;
#endif

#ifdef SLAVE
        hart_slave_init_t _slave;
#endif
    } hart_module_u;

} hart_init_t; // 模块初始化参数结构:hart_init

#pragma pack()

extern BOOL hart_init(const hart_init_t *const init);                      // 模块初始化接口
extern BOOL hart_handle(uint8_t uart_index, uint8_t *rxBuf, uint16_t len); // 模块数据处理接口
extern void perform_self_test_finish(void);                                // 自检完成
extern void hart_cache_data_send(uint64_t uuid);                           // 缓存数据发送
extern void ble_send_cmd(uint8_t *cmd);                                    // 发送蓝牙指令
extern BOOL get_device_lock(void);                                         // 是否锁定装置
#endif
